package com.crr;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接工厂 创建连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setVirtualHost("/erp");
        factory.setPort(5672);
        factory.setUsername("crr");
        factory.setPassword("chen1116.");
        factory.setHost("192.168.75.130");
        //创建连接
        Connection conn=factory.newConnection();
        //创建信道
        Channel channel=conn.createChannel();
        //声明队列
        String queueName="hello";
        /**
         * 参数说明
         * 1 queueName 队列的名称
         * 2 durable 对列是否持久化  true 支持持久化 mq服务器重启仍然存在 false 若队列没有消息 队列会删除
         * 3 exclusive 是否独占 true 独占生产者消费者必须使用同一个链接
         * 4 autoDelete 队列是否自动删除
         * 5 arguments 附加参数
         */
        channel.queueDeclare(queueName,false,false, false,null);
        //消费者消费消息
        /**
         * 参数说明：
         * 1. queue  队列名称  当前消费者要从哪个队列取消息
         * 2. autoAck 消息应答模式  true自动应答
         * 3. deliverCallback 从mq服务器接收到消息的回调
         * 4. cancelCallback 取消回调
         */
        channel.basicConsume(queueName,true,(consumerTag,message )->{
            System.out.println("consumerTag>>>"+consumerTag);
            String msg=new String(message.getBody());
            System.out.println("消费者获得消息:"+msg);
        },consumerTag->{});

        //注意 不用关闭释放资源   如果队列中有消息 会消费  没有会阻塞 等待消费
    }
}
